package cash.cmp.personal_financial_system.utils.login_else;

import cn.hutool.core.text.StrFormatter;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import cash.cmp.personal_financial_system.utils.allEnum.WxApiType;
import cash.cmp.personal_financial_system.model.ro.WxUserInfoRO;
import cash.cmp.personal_financial_system.model.ro.GetWxUserInfoRO;
import cash.cmp.personal_financial_system.model.ro.SystemConstant;
import lombok.extern.slf4j.Slf4j;

/**
 * @Description 微信登录工具包
 * @Author 小乌龟
 * @Date 2022/10/30 20:03
 */

@Slf4j
public class WxLoginUtil {
    /**
     *微信登录
     * @param code 前端请求获取=>微信code
     * @return void
     * @date 2023/1/17
     */

    public static WxUserInfoRO toWxLogin(String code){
        //1.通过前端给的code获取openid和access_token
        String getTokenOpenid = StrFormatter.format(WxApiType.GET_TOKEN_OPENID.getValue(), SystemConstant.APPID,SystemConstant.SECRET, code);
        String data = HttpUtil.get(getTokenOpenid);
        log.info("微信获取获取openid和access_token,返回结果======{}=====",data);
        //json=>bean
        GetWxUserInfoRO getWxUserInfoRO = JSONUtil.toBean(data, GetWxUserInfoRO.class);
        //2.通过access_token和openid获取用户信息
        String getUserInfo = StrFormatter.format(WxApiType.GET_WX_USERINFO.getValue(), getWxUserInfoRO.getAccess_token(), getWxUserInfoRO.getOpenid());
        String userInfoJson = HttpUtil.get(getUserInfo);
        log.info("微信获取用户信息====未转换对象===={}====",userInfoJson);
        WxUserInfoRO userInfo = JSONUtil.toBean(userInfoJson, WxUserInfoRO.class);
        log.info("微信获取用户信息===={}====",userInfo);
        // todo 待完善 用户信息获取失败 抛异常 (为了项目的精简 就不引入全局异常捕获)
        return userInfo;
    }
}
